package algoritmos;



import java.io.File;


import java.util.Iterator;

import java.util.List;



import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;



import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileItemFactory;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;



public class Uploader {

String relativePath;



/** Comienza a procesar los datos del formulario

*

* @param request Request actual con los datos del formulario

* @param context Context del servlet/jsp

* @return String con el resultado del proceso

*/

public String uploadFile(HttpServletRequest request, ServletContext context) {

if (request.getParameter("form") != null) {

this.relativePath = context.getRealPath("/");

this.parseRequest(request);

return "File Processed";

} else

return "";

}



/** Parsea los campos del formulario para almacenarlos en una lista

*

* @param request Request con los datos del formulario

*/

private void parseRequest(HttpServletRequest request) {

FileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

try {

List items = upload.parseRequest(request);

this.seekFileFields(items);

} catch (FileUploadException e) {

e.printStackTrace();

}

}



/** Recorre la lista de campos del formulario hasta encontrar alguno de tipo file

*

* @param items Lista de items/campos de formulario

*/

private void seekFileFields(List items) {

Iterator iter = items.iterator();

while (iter.hasNext()) {

FileItem item = (FileItem) iter.next();

if (!item.isFormField())

this.processUploadedFile(item);

}

}



/** Procesa el archivo enviado desde el formulario y lo

* almacena en el servidor con el nombre original en la misma

* ubicacion en q se encuentra el jsp que utiliza esta clase

*

* @param item Item con los datos del archivo

*/

private void processUploadedFile(FileItem item) {

Filename filename = new Filename(item.getName(), '\\', '.');

String file = filename.filename() + "." + filename.extension();

File uploadedFile = new File("/Users/arturoiglesias/Documents/Tesis/subidos", file);

try {

item.write(uploadedFile);

} catch (Exception e) {

e.printStackTrace();

}

}



}
